import axios from "axios";
import { message } from 'ant-design-vue';
const axiosInstance = axios.create({//创建axios实例
	baseURL: process.env.NODE_ENV === "production" ? "" : "/proxy",//设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
	headers: {
		'X-Requested-With': 'XMLHttpRequest',
	},
});
// 添加请求拦截器
axiosInstance.interceptors.request.use(
	(config) => {
		// 在发送请求之前做点什么，比如动态添加 token
		const token = localStorage.getItem("token");
		if (token) {
			config.headers["token"] = token; // 将 token 添加到请求头
		}
		if (!token && config.url != "/api/user/login") {
			message.warning("用户权限已过期请重新登录");
			localStorage.removeItem("token"); // 删除存储在 'token' 键下的数据
			setTimeout(() => {
				location.href = "login.html"; // 跳转到登录页面
			}, 1500); // 延迟跳转，确保提示可以显示
		}
		return config;
	},
	(error) => {
		// 处理请求错误
		console.error("Request Interceptor Error:", error);
		return Promise.reject(error);
	}
);
// 添加响应拦截器
axiosInstance.interceptors.response.use(
	(response) => {
		// 对响应数据进行处理
		const { data } = response;
		if (data.code !== 200) {
			// 假设响应的 code !== 200 表示业务错误
			// 如果需要跳转到登录页面，可以在此处理
			if (data.code === 401 && config.url != "/api/user/login") { // 假设 401 表示未授权
				message.warning("用户权限已过期请重新登录");
				localStorage.removeItem("token"); // 清除 token
				setTimeout(() => {
					location.href = "login.html"; // 跳转到登录页面
				}, 1500);
			}
		}
		return data; // 返回响应数据
	},
	(error) => {
		// 处理响应错误
		console.error("Response Interceptor Error:", error);
		if (error.response) {
			const { status, data } = error.response;
			switch (status) {
				case 401:
					message.warning("登录已过期，请重新登录", 2);
					localStorage.removeItem("token");
					setTimeout(() => {
						location.href = "login.html";
					}, 1500);
					break;
				case 403:
					message.error("没有权限访问该资源", 2);
					break;
				case 500:
					message.error("服务器内部错误", 2);
					break;
				default:
					message.error(data.message || "未知错误", 2);
			}
		} else {
			message.error("网络错误，请稍后重试", 2);
		}
		return Promise.reject(error); // 将错误抛出，供调用方捕获
	}
);
export default axiosInstance;